package com.open.lock.annotation;


import com.open.lock.enums.LockModel;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static com.open.lock.enums.LockModel.REENTRANT;

/**
 * @author zhang kaichao
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Lock {

    /**
     * 使用spring el表达式 用#来引用方法参数
     */
    String[] keys() default {};

    /**
     * 锁的模式
     */
    LockModel lockModel() default REENTRANT;

    /**
     * 等待加锁超时时间,单位毫秒，默认10000毫秒
     */
    long attemptTimeout() default 10000;

    /**
     * 自动释放锁的时间,单位毫秒,默认-1(表示业务执行完后释放锁)
     */
    long leaseTime() default -1;


}
